package com.yonyou.pmclouds.async;

import com.yonyou.pmclouds.basecom.async.AsyncInvocationInfo;

/**
 * 推送异步任务的接口，供调用方使用，抽象为接口，考虑根据环境的不同，变更实现<br/>
 * 任务处理流程为：prepare将任务转为待提交,所在事务结束后，将任务提交到执行队列，
 * <br/>提交的动作将由框架完成，部分特殊业务需要手工提交，再去手工调用
 * <br/>已经prepare之后，意味着调用方正常结束后，可被回查到。
 */
public interface AsyncTaskPusher {
    /**
     * 生成一个上下文相关的消息
     */
    AsyncInvocationInfo makeInfo();

    /**
     * 将一个任务转为待提交状态，可能发生写入数据库但不提交、发送预提交消息等行为
     *
     * @return 转为待提交态的消息
     */
    AsyncInvocationInfo prepare(AsyncInvocationInfo info);

    /**
     * 将指定消息转入待执行状态，一般由事务框架调用，手动控制事务时，手动调用
     */
    AsyncInvocationInfo pushToExecutorQueue(AsyncInvocationInfo info);
}
